// 回调函数

// 案例1：先打印输出1，然后再打印输出2。

// {
//     function one() {
//         console.log(1);
//     }
//     function two() {
//         console.log(2);
//     }

//     one();
//     two();
//     // 1 2
// }

// {
//     function one() {
//         setTimeout(() => {
//             console.log(1);
//         }, 0)
//     }
//     function two() {
//         console.log(2);
//     }

//     one();
//     two();
//     // 2 1
// }


// 回调函数
// {
//     function one(callback) {
//         setTimeout(() => {
//             console.log(1);
//             callback && callback();
//         }, 0)
//     }
//     function two() {
//         console.log(2);
//     }

//     one(two); // 1 2
// }


// 简化
// {
//     function one(callback) {
//         setTimeout(() => {
//             console.log(1);
//             callback && callback();
//         }, 0)
//     }
//     // function two() {
//     //     console.log(2);
//     // }

//     one(() => {
//         console.log(2);
//     }); // 1 2
// }

// 案例2：简单加法运算，但是有一个条件，传入参数和返回计算结果是异步的。

// function sum(x, y) {
//     return x + y;
// }

// console.log(sum(1, 2));

// function sum(x, y) {
//     console.log("开始计算");
//     // 设置1s后返回计算结果
//     setTimeout(() => {
//         // 返回计算结果
//         return x + y;
//     }, 1000);
//     console.log("结束计算");
// }

// // 打印函数调用返回结果
// console.log("sum(1, 2)的计算结果" + sum(1, 2)); // undefined

// 为什么会是这个结果？是因为程序没有等待到setTimeout里面相加这步运行结束就已经打印输出结果了。所以返回结果是undefined。

// 使用回调函数来解决这个问题

function sum(x, y, callback) {
    console.log("开始计算");
    // 设置1s后返回计算结果
    setTimeout(() => {
        // 返回计算结果
        let result = x + y;
        callback && callback(result);
    }, 1000);
    console.log("结束计算");
}

// 打印函数调用返回结果
sum(1, 2, res => {
    console.log("sum(1, 2)的计算结果" + res);
}); // 3



